package org.iamd.conf;

import java.io.File;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

/**
 * Сървлет съдържащ инициализация на приложението.
 * 
 * @author И. Атанасов
 */
public class ApplicationInitServlet extends HttpServlet {

	/** Ключ на конфигурационната директория. */
	private static final String CONFIG_PATH_SUFFIX = "configPathSuffix";

	/** Ключ на централния конфигурационен файл. */
	private static final String MASTER_CONF_FILE = "masterConfigFile";

	/** Сериен номер на класа. */
	private static final long serialVersionUID = -3733403703918526870L;

	/** '/' */
	private static final String SLASH = "/";

	/**
	 * Стандартен конструктор.
	 * 
	 * @see HttpServlet#HttpServlet()
	 */
	public ApplicationInitServlet() {
		super();
	}

	/**
	 * Инициализация на системната и компонентната конфигурация, чрез
	 * извикването на <code>ConfigurationManager</code>.
	 * 
	 * @see Servlet#init(ServletConfig)
	 * 
	 * @throws ServletException
	 *             при неуспешна инициализация
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		try {
			ServletContext context = config.getServletContext();
			String realPath = context.getRealPath(SLASH);
			File applDir = new File(realPath.substring(0,
					realPath.indexOf(context.getContextPath().substring(SLASH.length()))));
			File confDir = new File(
					context.getRealPath(config.getInitParameter(CONFIG_PATH_SUFFIX)));
			File masterConfig = new File(confDir, config.getInitParameter(MASTER_CONF_FILE));
			ConfigurationManager.getInstance().initializeConfig(applDir, confDir, masterConfig);
		} catch (Throwable e) {
			throw new ServletException(e);
		}
	}

}